/*
 * Copyright 1999-2017 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package studio.raptor.sqlparser.dialect.mysql.visitor;

import studio.raptor.sqlparser.dialect.mysql.ast.MySqlForceIndexHint;
import studio.raptor.sqlparser.dialect.mysql.ast.MySqlIgnoreIndexHint;
import studio.raptor.sqlparser.dialect.mysql.ast.MySqlKey;
import studio.raptor.sqlparser.dialect.mysql.ast.MySqlPrimaryKey;
import studio.raptor.sqlparser.dialect.mysql.ast.MySqlUnique;
import studio.raptor.sqlparser.dialect.mysql.ast.MySqlUseIndexHint;
import studio.raptor.sqlparser.dialect.mysql.ast.MysqlForeignKey;
import studio.raptor.sqlparser.dialect.mysql.ast.clause.MySqlCaseStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWhenStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.clause.MySqlCursorDeclareStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.clause.MySqlDeclareConditionStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.clause.MySqlDeclareHandlerStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.clause.MySqlDeclareStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.clause.MySqlIterateStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.clause.MySqlLeaveStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.clause.MySqlRepeatStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.clause.MySqlSelectIntoStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.clause.MySqlWhileStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.expr.MySqlCharExpr;
import studio.raptor.sqlparser.dialect.mysql.ast.expr.MySqlExtractExpr;
import studio.raptor.sqlparser.dialect.mysql.ast.expr.MySqlIntervalExpr;
import studio.raptor.sqlparser.dialect.mysql.ast.expr.MySqlMatchAgainstExpr;
import studio.raptor.sqlparser.dialect.mysql.ast.expr.MySqlOrderingExpr;
import studio.raptor.sqlparser.dialect.mysql.ast.expr.MySqlOutFileExpr;
import studio.raptor.sqlparser.dialect.mysql.ast.expr.MySqlUserName;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.CobarShowStatus;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlAlterTableAlterColumn;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlAlterTableChangeColumn;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlAlterTableCharacter;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlAlterTableDiscardTablespace;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlAlterTableImportTablespace;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlAlterTableModifyColumn;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlAlterTableOption;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlAlterUserStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlAnalyzeStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlBinlogStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlCommitStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlCreateTableStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlCreateUserStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlDeleteStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlExecuteStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlExplainStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlHelpStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlHintStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlInsertStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlKillStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlLoadDataInFileStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlLoadXmlStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlLockTableStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlOptimizeStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlPartitionByKey;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlPrepareStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlRenameTableStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlReplaceStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlResetStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlRollbackStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlSelectQueryBlock;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlSetCharSetStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlSetNamesStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlSetPasswordStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlSetTransactionStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowAuthorsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowBinLogEventsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowBinaryLogsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowCharacterSetStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowCollationStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowColumnsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowContributorsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowCreateDatabaseStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowCreateEventStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowCreateFunctionStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowCreateProcedureStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowCreateTableStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowCreateTriggerStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowCreateViewStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowDatabasesStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowEngineStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowEnginesStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowErrorsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowEventsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowFunctionCodeStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowFunctionStatusStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowGrantsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowIndexesStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowKeysStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowMasterStatusStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowOpenTablesStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowPluginsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowPrivilegesStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowProcedureCodeStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowProcedureStatusStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowProcessListStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowProfileStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowProfilesStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowRelayLogEventsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowSlaveHostsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowSlaveStatusStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowStatusStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowTableStatusStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowTriggersStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowVariantsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlShowWarningsStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlSubPartitionByKey;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlSubPartitionByList;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlTableIndex;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlUnionQuery;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlUnlockTablesStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlUpdateStatement;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MySqlUpdateTableSource;
import studio.raptor.sqlparser.dialect.mysql.ast.statement.MysqlDeallocatePrepareStatement;
import studio.raptor.sqlparser.visitor.SQLASTVisitor;

public interface MySqlASTVisitor extends SQLASTVisitor {

  boolean visit(MySqlTableIndex x);

  void endVisit(MySqlTableIndex x);

  boolean visit(MySqlKey x);

  void endVisit(MySqlKey x);

  boolean visit(MySqlPrimaryKey x);

  void endVisit(MySqlPrimaryKey x);

  boolean visit(MySqlUnique x);

  void endVisit(MySqlUnique x);

  boolean visit(MysqlForeignKey x);

  void endVisit(MysqlForeignKey x);

  void endVisit(MySqlIntervalExpr x);

  boolean visit(MySqlIntervalExpr x);

  void endVisit(MySqlExtractExpr x);

  boolean visit(MySqlExtractExpr x);

  void endVisit(MySqlMatchAgainstExpr x);

  boolean visit(MySqlMatchAgainstExpr x);

  void endVisit(MySqlPrepareStatement x);

  boolean visit(MySqlPrepareStatement x);

  void endVisit(MySqlExecuteStatement x);

  boolean visit(MysqlDeallocatePrepareStatement x);

  void endVisit(MysqlDeallocatePrepareStatement x);

  boolean visit(MySqlExecuteStatement x);

  void endVisit(MySqlDeleteStatement x);

  boolean visit(MySqlDeleteStatement x);

  void endVisit(MySqlInsertStatement x);

  boolean visit(MySqlInsertStatement x);

  void endVisit(MySqlLoadDataInFileStatement x);

  boolean visit(MySqlLoadDataInFileStatement x);

  void endVisit(MySqlLoadXmlStatement x);

  boolean visit(MySqlLoadXmlStatement x);

  void endVisit(MySqlReplaceStatement x);

  boolean visit(MySqlReplaceStatement x);

  void endVisit(MySqlCommitStatement x);

  boolean visit(MySqlCommitStatement x);

  void endVisit(MySqlRollbackStatement x);

  boolean visit(MySqlRollbackStatement x);

  void endVisit(MySqlShowColumnsStatement x);

  boolean visit(MySqlShowColumnsStatement x);

  void endVisit(MySqlShowDatabasesStatement x);

  boolean visit(MySqlShowDatabasesStatement x);

  void endVisit(MySqlShowWarningsStatement x);

  boolean visit(MySqlShowWarningsStatement x);

  void endVisit(MySqlShowStatusStatement x);

  boolean visit(MySqlShowStatusStatement x);

  void endVisit(MySqlShowAuthorsStatement x);

  boolean visit(MySqlShowAuthorsStatement x);

  void endVisit(CobarShowStatus x);

  boolean visit(CobarShowStatus x);

  void endVisit(MySqlKillStatement x);

  boolean visit(MySqlKillStatement x);

  void endVisit(MySqlBinlogStatement x);

  boolean visit(MySqlBinlogStatement x);

  void endVisit(MySqlResetStatement x);

  boolean visit(MySqlResetStatement x);

  void endVisit(MySqlCreateUserStatement x);

  boolean visit(MySqlCreateUserStatement x);

  void endVisit(MySqlCreateUserStatement.UserSpecification x);

  boolean visit(MySqlCreateUserStatement.UserSpecification x);

  void endVisit(MySqlPartitionByKey x);

  boolean visit(MySqlPartitionByKey x);

  boolean visit(MySqlSelectQueryBlock x);

  void endVisit(MySqlSelectQueryBlock x);

  boolean visit(MySqlOutFileExpr x);

  void endVisit(MySqlOutFileExpr x);

  boolean visit(MySqlExplainStatement x);

  void endVisit(MySqlExplainStatement x);

  boolean visit(MySqlUpdateStatement x);

  void endVisit(MySqlUpdateStatement x);

  boolean visit(MySqlSetTransactionStatement x);

  void endVisit(MySqlSetTransactionStatement x);

  boolean visit(MySqlSetNamesStatement x);

  void endVisit(MySqlSetNamesStatement x);

  boolean visit(MySqlSetCharSetStatement x);

  void endVisit(MySqlSetCharSetStatement x);

  boolean visit(MySqlShowBinaryLogsStatement x);

  void endVisit(MySqlShowBinaryLogsStatement x);

  boolean visit(MySqlShowMasterLogsStatement x);

  void endVisit(MySqlShowMasterLogsStatement x);

  boolean visit(MySqlShowCharacterSetStatement x);

  void endVisit(MySqlShowCharacterSetStatement x);

  boolean visit(MySqlShowCollationStatement x);

  void endVisit(MySqlShowCollationStatement x);

  boolean visit(MySqlShowBinLogEventsStatement x);

  void endVisit(MySqlShowBinLogEventsStatement x);

  boolean visit(MySqlShowContributorsStatement x);

  void endVisit(MySqlShowContributorsStatement x);

  boolean visit(MySqlShowCreateDatabaseStatement x);

  void endVisit(MySqlShowCreateDatabaseStatement x);

  boolean visit(MySqlShowCreateEventStatement x);

  void endVisit(MySqlShowCreateEventStatement x);

  boolean visit(MySqlShowCreateFunctionStatement x);

  void endVisit(MySqlShowCreateFunctionStatement x);

  boolean visit(MySqlShowCreateProcedureStatement x);

  void endVisit(MySqlShowCreateProcedureStatement x);

  boolean visit(MySqlShowCreateTableStatement x);

  void endVisit(MySqlShowCreateTableStatement x);

  boolean visit(MySqlShowCreateTriggerStatement x);

  void endVisit(MySqlShowCreateTriggerStatement x);

  boolean visit(MySqlShowCreateViewStatement x);

  void endVisit(MySqlShowCreateViewStatement x);

  boolean visit(MySqlShowEngineStatement x);

  void endVisit(MySqlShowEngineStatement x);

  boolean visit(MySqlShowEnginesStatement x);

  void endVisit(MySqlShowEnginesStatement x);

  boolean visit(MySqlShowErrorsStatement x);

  void endVisit(MySqlShowErrorsStatement x);

  boolean visit(MySqlShowEventsStatement x);

  void endVisit(MySqlShowEventsStatement x);

  boolean visit(MySqlShowFunctionCodeStatement x);

  void endVisit(MySqlShowFunctionCodeStatement x);

  boolean visit(MySqlShowFunctionStatusStatement x);

  void endVisit(MySqlShowFunctionStatusStatement x);

  boolean visit(MySqlShowGrantsStatement x);

  void endVisit(MySqlShowGrantsStatement x);

  boolean visit(MySqlUserName x);

  void endVisit(MySqlUserName x);

  boolean visit(MySqlShowIndexesStatement x);

  void endVisit(MySqlShowIndexesStatement x);

  boolean visit(MySqlShowKeysStatement x);

  void endVisit(MySqlShowKeysStatement x);

  boolean visit(MySqlShowMasterStatusStatement x);

  void endVisit(MySqlShowMasterStatusStatement x);

  boolean visit(MySqlShowOpenTablesStatement x);

  void endVisit(MySqlShowOpenTablesStatement x);

  boolean visit(MySqlShowPluginsStatement x);

  void endVisit(MySqlShowPluginsStatement x);

  boolean visit(MySqlShowPrivilegesStatement x);

  void endVisit(MySqlShowPrivilegesStatement x);

  boolean visit(MySqlShowProcedureCodeStatement x);

  void endVisit(MySqlShowProcedureCodeStatement x);

  boolean visit(MySqlShowProcedureStatusStatement x);

  void endVisit(MySqlShowProcedureStatusStatement x);

  boolean visit(MySqlShowProcessListStatement x);

  void endVisit(MySqlShowProcessListStatement x);

  boolean visit(MySqlShowProfileStatement x);

  void endVisit(MySqlShowProfileStatement x);

  boolean visit(MySqlShowProfilesStatement x);

  void endVisit(MySqlShowProfilesStatement x);

  boolean visit(MySqlShowRelayLogEventsStatement x);

  void endVisit(MySqlShowRelayLogEventsStatement x);

  boolean visit(MySqlShowSlaveHostsStatement x);

  void endVisit(MySqlShowSlaveHostsStatement x);

  boolean visit(MySqlShowSlaveStatusStatement x);

  void endVisit(MySqlShowSlaveStatusStatement x);

  boolean visit(MySqlShowTableStatusStatement x);

  void endVisit(MySqlShowTableStatusStatement x);

  boolean visit(MySqlShowTriggersStatement x);

  void endVisit(MySqlShowTriggersStatement x);

  boolean visit(MySqlShowVariantsStatement x);

  void endVisit(MySqlShowVariantsStatement x);

  boolean visit(MySqlRenameTableStatement.Item x);

  void endVisit(MySqlRenameTableStatement.Item x);

  boolean visit(MySqlRenameTableStatement x);

  void endVisit(MySqlRenameTableStatement x);

  boolean visit(MySqlUnionQuery x);

  void endVisit(MySqlUnionQuery x);

  boolean visit(MySqlUseIndexHint x);

  void endVisit(MySqlUseIndexHint x);

  boolean visit(MySqlIgnoreIndexHint x);

  void endVisit(MySqlIgnoreIndexHint x);

  boolean visit(MySqlLockTableStatement x);

  void endVisit(MySqlLockTableStatement x);

  boolean visit(MySqlUnlockTablesStatement x);

  void endVisit(MySqlUnlockTablesStatement x);

  boolean visit(MySqlForceIndexHint x);

  void endVisit(MySqlForceIndexHint x);

  boolean visit(MySqlAlterTableChangeColumn x);

  void endVisit(MySqlAlterTableChangeColumn x);

  boolean visit(MySqlAlterTableCharacter x);

  void endVisit(MySqlAlterTableCharacter x);

  boolean visit(MySqlAlterTableOption x);

  void endVisit(MySqlAlterTableOption x);

  boolean visit(MySqlCreateTableStatement x);

  void endVisit(MySqlCreateTableStatement x);

  boolean visit(MySqlHelpStatement x);

  void endVisit(MySqlHelpStatement x);

  boolean visit(MySqlCharExpr x);

  void endVisit(MySqlCharExpr x);

  boolean visit(MySqlAlterTableModifyColumn x);

  void endVisit(MySqlAlterTableModifyColumn x);

  boolean visit(MySqlAlterTableDiscardTablespace x);

  void endVisit(MySqlAlterTableDiscardTablespace x);

  boolean visit(MySqlAlterTableImportTablespace x);

  void endVisit(MySqlAlterTableImportTablespace x);

  boolean visit(MySqlCreateTableStatement.TableSpaceOption x);

  void endVisit(MySqlCreateTableStatement.TableSpaceOption x);

  boolean visit(MySqlAnalyzeStatement x);

  void endVisit(MySqlAnalyzeStatement x);

  boolean visit(MySqlAlterUserStatement x);

  void endVisit(MySqlAlterUserStatement x);

  boolean visit(MySqlOptimizeStatement x);

  void endVisit(MySqlOptimizeStatement x);

  boolean visit(MySqlSetPasswordStatement x);

  void endVisit(MySqlSetPasswordStatement x);

  boolean visit(MySqlHintStatement x);

  void endVisit(MySqlHintStatement x);

  boolean visit(MySqlOrderingExpr x);

  void endVisit(MySqlOrderingExpr x);

  /**
   * support procedure
   */
  boolean visit(MySqlWhileStatement x);

  void endVisit(MySqlWhileStatement x);

  boolean visit(MySqlCaseStatement x);

  void endVisit(MySqlCaseStatement x);

  boolean visit(MySqlDeclareStatement x);

  void endVisit(MySqlDeclareStatement x);

  boolean visit(MySqlSelectIntoStatement x);

  void endVisit(MySqlSelectIntoStatement x);

  boolean visit(MySqlWhenStatement x);

  void endVisit(MySqlWhenStatement x);

  boolean visit(MySqlLeaveStatement x);

  void endVisit(MySqlLeaveStatement x);

  boolean visit(MySqlIterateStatement x);

  void endVisit(MySqlIterateStatement x);

  boolean visit(MySqlRepeatStatement x);

  void endVisit(MySqlRepeatStatement x);

  boolean visit(MySqlCursorDeclareStatement x);

  void endVisit(MySqlCursorDeclareStatement x);

  boolean visit(MySqlUpdateTableSource x);

  void endVisit(MySqlUpdateTableSource x);

  boolean visit(MySqlAlterTableAlterColumn x);

  void endVisit(MySqlAlterTableAlterColumn x);

  boolean visit(MySqlSubPartitionByKey x);

  void endVisit(MySqlSubPartitionByKey x);

  boolean visit(MySqlSubPartitionByList x);

  void endVisit(MySqlSubPartitionByList x);

  boolean visit(MySqlDeclareHandlerStatement x);

  void endVisit(MySqlDeclareHandlerStatement x);

  boolean visit(MySqlDeclareConditionStatement x);

  void endVisit(MySqlDeclareConditionStatement x);

} //
